package com.plm.mqshequ.nosql;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;


/**
 * @author Limi
 * @create 2019-02-22 14:08
 */
@Repository
public class RedisSetOps {

    @Autowired
    private StringRedisTemplate template;

    /**
     * SADD key member [member …]
     * 将一个或多个 member 元素加入到集合 key 当中，已经存在于集合的 member 元素将被忽略.
     * 假如 key 不存在，则创建一个只包含 member 元素作成员的集合.
     * 当 key 不是集合类型时，返回一个错误。
     * @param key
     * @param members
     */
    public Long sadd(String key, String[] members){
        Long add = template.opsForSet().add(key, members);
        return add;
    }

    public Long sadd(String key, String member){
        Long add = template.opsForSet().add(key, member);
        return add;
    }

    /**
     * SREM key member [member …]
     * 移除集合 key 中的一个或多个 member 元素，不存在的 member 元素会被忽略。
     * 当 key 不是集合类型，返回一个错误。
     * @param key
     * @param member
     * @return
     */
    public Long srem(String key, String member){
        Long remove = template.opsForSet().remove(key, member);
        return remove;
    }

    /**
     * SISMEMBER key member
     * 判断 member 元素是否集合 key 的成员。
     * @param key
     * @param member
     * @return
     */
    public boolean sismember(String key, String member){
        return template.opsForSet().isMember(key, member);
    }

    /**
     * SCARD key
     * 返回集合 key 的基数(集合中元素的数量)。集合的基数, 当 key 不存在时，返回 0 .
     * @param key
     * @return
     */
    public Long scard(String key){
        Long size = template.opsForSet().size(key);
        return size;
    }

    /**
     * SMEMBERS key
     * 返回集合 key 中的所有成员。
     * 不存在的 key 被视为空集合。
     * @param key
     */
    public List<String> smembers(String key){
        Set<String> members = template.opsForSet().members(key);
        List<String> list = new ArrayList<>(members);
        return list;
    }

}
